#!/usr/bin/bash

#============================================
# 系统资源监控
# 参考：https://www.imooc.com/video/10494
#============================================

clear
#初始化终端颜色，即清除颜色
resetTerminal=$(tput sgr0)
# tput setab 0~7 用于设置背景色 
# tput setaf 0~7 用于设置前景色
# 更多颜色设置参考echo.sh

#====================================================================
# 获取操作系统基本信息
# 参考：https://www.imooc.com/video/10491
#====================================================================

#获取操作系统类型
os=$(uname -o)
#echo -e 终端颜色+显示内容+结束后的颜色
# 0m-默认 32m-灰 31m-红 32m-绿 33m-黄 34m-蓝 35m-紫 36-青
echo -e '\E[32m' "操作系统类型为:$resetTerminal" $os


#获取操作系统发行版本和名称
osName=$(cat /etc/issue | grep -e "Server")
echo -e '\E[32m' "操作系统发行版本和名称为:$resetTerminal" $osName

#获取CPU架构 指令集是32位还是64位
architecture=$(uname -m)
echo -e '\E[32m' "CPU架构为:$resetTerminal" $architecture

#获取操作系统内核版本
kernelRelease=$(uname -r)
echo -e '\E[32m' "操作系统内核版本为:$resetTerminal" $kernelRelease

#====================================================================
# 获取网络配置信息
# 参考：https://www.imooc.com/video/10492
#====================================================================

#获取主机名
hostName=$HOSTNAME
#hostname=$(uname -n) 同上一条
echo -e '\E[32m' "主机名为:$resetTerminal" $hostName

#获取内网IP
internalIP=$(hostname -I)
echo -e '\E[32m' "内网IP为:$resetTerminal" $internalIP

#获取公网IP
externalIP=$(curl -s http://ipecho.net/plain)
echo -e '\E[32m' "公网IP为:$resetTerminal" $externalIP

#获取DNS
dnsServers=$(cat /etc/resolv.conf | grep -E "\<nameserver[ ]+" | awk '{print $NF}')
echo -e '\E[32m' "DNS为:$resetTerminal" $dnsServers

#检测是否连网
isConnected=$(ping -c 2 baidu.com &>/dev/null && echo "Internet:Connected" || echo "Internet:Disconnected")
echo -e '\E[32m' "检测是否连网:$resetTerminal" $isConnected # \E[32m 显示颜色

#获取当前登录用户名单
who > /tmp/who
echo -e '\E[32m' "当前登录用户名单:$resetTerminal" && cat /tmp/who
rm -f /tmp/who

#获取操作系统已使用内存（单位M）
# 操作系统已使用内存=总内存-未使用内存
osUsedMem=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/1024}' /proc/meminfo)
#可以先测试输出 awk '/MemTotal/{print total在这个花括号里可以定义临时变量}/MemFree/{print free}' /proc/meminfo
# $2 意思是返回结果的第2列的值，从行首开始数，按空格来区分列
echo -e '\E[32m' "操作系统已使用的内存:$resetTerminal" $osUsedMem"M"

#获取应用程序已使用内存（单位M）
# 应用程序已使用内存=总内存-未使用内存-Cache文件内存-Buffer内存
appUsedMem=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}/^Cached/{cached=$2}/Buffers/{buffers=$2}END{print (total-free-cached-buffers)/1024}' /proc/meminfo)
# ^Cached 正则匹配Cached开头的项
echo -e '\E[32m' "应用程序已使用的内存:$resetTerminal" $appUsedMem"M"
#Cache与Buffer的区别
# Cache缓存主要用于打开的文件
# Buffer分缓存主要用于目录项、iNode等文件系统

#获取CPU负载情况
loadAverage=$(top -n 1 -b | grep "load average:" | awk '{print $12 $13 $14}') #这个列数 因系统不同需要修改，可以先测试一下返回结果
echo -e '\E[32m' "CPU负载情况:$resetTerminal" $loadAverage

#获取磁盘使用量
diskAvege=$(df -hP | grep -vE '文件系统|tmpfs' | awk '{print $1 " " $5}')
echo -e '\E[32m' "磁盘使用量:$resetTerminal" $diskAvege

